package com.lqk.principle.liskov.improve;

/**
 * @author lqk
 * @date 2021/11/25 20:49
 */
public class LiskovImp {
    public static void main(String[] args) {
        A a = new A();
        System.out.println("11-3=" + a.fun1(11,3));
        System.out.println("1-8=" + a.fun1(1,8));
        System.out.println("----------------------");
        B b = new B();
        System.out.println("11+3=" + b.fun1(11,3)); // 本意是求出11-3，但是方法已经重写了
        System.out.println("11+3+9=" + b.fun2(11,3));

        // 使用组合仍然可以使用到A类相关方法
        System.out.println("1-8=" + b.fun3(1,8));
    }
}

// 创建一个更加基础的基类
class Base{
    // 把更加基础的方法和成员写到Base类中
}

// A类
class A extends Base{
    // 返回两个数的差
    public int fun1(int num1,int num2){
        return num1 - num2;
    }
}

// B类
// 增加了一个新的功能：完成两个数相加，然后和9求和
class B extends Base {
    // 如果B需要使用到A类的方法，使用组合关系
    private A a = new A();

    public int fun1(int a,int b){
        return a + b;
    }
    public int fun2(int a,int b){
        return fun1(a, b)+9;
    }

    // 使用A的方法
    public int fun3(int a,int b){
        return this.a.fun1(a,b);
    }
}
